package com.zenithmind.coding.service;

/**
 * 编程语言支持服务接口 - 遵循接口隔离原则，专门处理编程语言支持相关功能
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface LanguageSupportService {

    /**
     * 获取支持的编程语言
     * 
     * @return 编程语言列表
     */
    String[] getSupportedLanguages();

    /**
     * 检查语言支持
     * 
     * @param language 编程语言
     * @return 是否支持
     */
    Boolean isLanguageSupported(String language);

    /**
     * 获取语言配置
     * 
     * @param language 编程语言
     * @return 语言配置
     */
    Object getLanguageConfig(String language);

    /**
     * 获取语言模板
     * 
     * @param language 编程语言
     * @param templateType 模板类型
     * @return 代码模板
     */
    String getLanguageTemplate(String language, String templateType);

    /**
     * 获取语言示例
     * 
     * @param language 编程语言
     * @return 示例代码
     */
    Object getLanguageExamples(String language);

    /**
     * 获取语言文档
     * 
     * @param language 编程语言
     * @return 文档链接
     */
    Object getLanguageDocumentation(String language);

    /**
     * 获取语言版本
     * 
     * @param language 编程语言
     * @return 版本信息
     */
    String getLanguageVersion(String language);

    /**
     * 获取语言特性
     * 
     * @param language 编程语言
     * @return 语言特性
     */
    Object getLanguageFeatures(String language);

    /**
     * 获取语言限制
     * 
     * @param language 编程语言
     * @return 执行限制
     */
    Object getLanguageLimits(String language);

    /**
     * 添加语言支持
     * 
     * @param languageConfig 语言配置
     * @return 是否成功
     */
    Boolean addLanguageSupport(Object languageConfig);

    /**
     * 更新语言配置
     * 
     * @param language 编程语言
     * @param languageConfig 语言配置
     * @return 是否成功
     */
    Boolean updateLanguageConfig(String language, Object languageConfig);

    /**
     * 禁用语言支持
     * 
     * @param language 编程语言
     * @return 是否成功
     */
    Boolean disableLanguageSupport(String language);

    /**
     * 启用语言支持
     * 
     * @param language 编程语言
     * @return 是否成功
     */
    Boolean enableLanguageSupport(String language);

    /**
     * 获取语言编译器信息
     * 
     * @param language 编程语言
     * @return 编译器信息
     */
    Object getLanguageCompilerInfo(String language);

    /**
     * 获取语言运行时信息
     * 
     * @param language 编程语言
     * @return 运行时信息
     */
    Object getLanguageRuntimeInfo(String language);

    /**
     * 验证语言代码语法
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 语法检查结果
     */
    Object validateLanguageSyntax(String language, String sourceCode);

    /**
     * 获取语言关键字
     * 
     * @param language 编程语言
     * @return 关键字列表
     */
    String[] getLanguageKeywords(String language);

    /**
     * 获取语言内置函数
     * 
     * @param language 编程语言
     * @return 内置函数列表
     */
    Object getLanguageBuiltinFunctions(String language);
}
